#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <unordered_map>
#include <vector>
#include <set>
#include <queue>

using namespace std;
using LL = long long;
using PII = pair<int, int>;
const int N = 310;

int cnt[N];
int H, W, n, h, w;
int q[N][N][N];
int g[N][N];
int cur[N];
int res;

void merge(int i, int j){
    // q[i][j] = q[i - 1][j] + q[i][j - 1] - q[i - 1][j - 1]

    for(int k = 1; k <= n; k ++){
        q[i][j][k] = q[i - 1][j][k] + q[i][j - 1][k] - q[i - 1][j - 1][k];
    }

    q[i][j][g[i][j]] ++;
} 

void sol(int x, int y){
    int nx = x + h - 1, ny = y + w - 1;
    // q[nx][ny] - q[nx][y - 1] - q[x - 1][ny] + q[x - 1][y - 1]

    int t = res;
    for(int k = 1; k <= n; k ++){
        cur[k] = q[nx][ny][k] - q[nx][y - 1][k] - q[x - 1][ny][k] + q[x - 1][y - 1][k];
    }

    for(int k = 1; k <= n; k ++){
        if(cur[k] && cur[k] == cnt[k]){
            t --;
        }
    }

    cout << t << " ";


}

int main(){
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> H >> W >> n >> h >> w;

    for(int i = 1; i <= H; i ++){
        for(int j = 1; j <= W; j ++){
            cin >> g[i][j];
            cnt[g[i][j]] ++;

            if(cnt[g[i][j]] == 1) res ++;
        }
    }

    for(int i = 1; i <= H; i ++){
        for(int j = 1; j <= W; j ++){
            merge(i, j);
        }
    }


    for(int i = 1; i + h - 1 <= H; i ++){
        for(int j = 1; j + w - 1 <= W; j ++){
            sol(i, j);
        }
        cout << '\n';
    }




    return 0;
}